// 思路1，双指针
// 对两个数组先排序，然后使用两个指针index1和index2分别指向两个数组的第一个元素
// 比较两个数组的元素，动态移动两个指针

function intersection(nums1, nums2) {
    nums1.sort((a, b) => a - b)
    nums2.sort((a, b) => a - b)
    let index1 = 0
    let index2 = 0
    let res = []
    while (index1 < nums1.length && index2 < nums2.length) {
        if (nums1[index1] === nums2[index2]) {
            if (!res.includes(nums1[index1])) {
                res.push(nums1[index1])
            }
            index1++
            index2++
        } else if (nums1[index1] < nums2[index2]) {
            index1++
        } else {
            index2++
        }
    }
    return res
}

let arr1 = [4, 9, 5]
let arr2 = [9, 4, 9, 8, 4]
console.log(intersection(arr1, arr2));


// 思路2，哈希表
// 先用set存储一个数组，遍历另一个数组判断，如果相同放到结果set中，最终去重并得到结果

function intersection2(nums1, nums2) {
    if (nums1.length < nums2.length) {
        [nums1, nums2] = [nums2, nums1];
    }
    let set = new Set(nums1)
    let resSet = new Set()
    for (const item of nums2) {
        if (set.has(item)) {
            resSet.add(item)
        }
    }
    return Array.from(resSet)
}

let arr11 = [4, 9, 5]
let arr22 = [9, 4, 9, 8, 4]
console.log(intersection2(arr11, arr22));